home *** CD-ROM | disk | FTP | other *** search
/ BCI NET 2 / BCI NET 2.iso / archives / programming / c / agl103p.lha / src / agl / RCS / border.c,v < prev    next >
Encoding:
Text File  |  1994-12-09  |  8.6 KB  |  463 lines

  1. head    1.2;
  2. branch    1.2.1.99;
  3. access;
  4. symbols;
  5. locks; strict;
  6. comment    @ * @;
  7.  
  8.  
  9. 1.2
  10. date    94.11.16.06.21.14;    author jason;    state Exp;
  11. branches
  12.     1.2.1.1;
  13. next    1.1;
  14.  
  15. 1.1
  16. date    94.10.28.04.14.08;    author jason;    state Exp;
  17. branches;
  18. next    ;
  19.  
  20. 1.2.1.1
  21. date    94.11.16.07.08.31;    author jason;    state Exp;
  22. branches;
  23. next    1.2.1.2;
  24.  
  25. 1.2.1.2
  26. date    94.12.09.05.29.56;    author jason;    state Exp;
  27. branches;
  28. next    ;
  29.  
  30.  
  31. desc
  32. @SGI style window borders
  33. @
  34.  
  35.  
  36. 1.2
  37. log
  38. @complete Motif style borders
  39. @
  40. text
  41. @/******************************************************************************
  42.  
  43. $Id: border.c 1.1 1994/10/28 04:14:08 jason Exp jason $
  44.  
  45. $Log: border.c $
  46.  * Revision 1.1  1994/10/28  04:14:08  jason
  47.  * Initial revision
  48.  *
  49.  
  50. ******************************************************************************/
  51.  
  52.  
  53. #ifndef NOT_EXTERN
  54. #include"agl.h"
  55. #endif
  56.  
  57.  
  58. /******************************************************************************
  59. void    drawborder(long id)
  60.  
  61.     if id<0, draw all window borders
  62.  
  63. ******************************************************************************/
  64. /*PROTOTYPE*/
  65. void drawborder(long id)
  66.     {
  67.     long x,y,lenx,leny;
  68.     long w,h;
  69.     long ledge;
  70.     long wid,old_wid;
  71.     long m,a,b;
  72.     long midcolor;
  73.     long darkcolor=DARKGREY;
  74.     long start,end;
  75.  
  76.     old_wid=CurrentWid;
  77.  
  78.     if(id<0)
  79.         {
  80.         start=0;
  81.         end=MAX_WINDOWS;
  82.         }
  83.     else
  84.         {
  85.         start=id;
  86.         end=id+1;
  87.         }
  88.  
  89.     for(wid=start;wid<end;wid++)
  90.         if(GLWindow[wid] && Bordered[wid])
  91.             {
  92.             winset(wid);
  93.  
  94.             if(GLFocus==wid)
  95.                 midcolor=LAVENDER;
  96.             else
  97.                 midcolor=LIGHTGREY;
  98.  
  99.             w=BorderWidth;
  100.             h=BorderHeight;
  101.  
  102.             ledge= BorderWidth>5? 2: 1;
  103.  
  104.             get_dimensions(wid,TRUE,&x,&y,&lenx,&leny);
  105.  
  106.             deactivate_clipping(wid);
  107.  
  108.  
  109.             /* title bar */
  110.             agl_box(wid,midcolor,midcolor,        w,w,lenx-w-1,w+h-1,TRUE);
  111.             agl_box(wid,WHITE,darkcolor,        w,w,lenx-w-1,w+h-1,FALSE);
  112.  
  113.             /* title text */
  114.             agl_text(wid,BLACK,                    w+h+2,w+h-3,TitleList[wid]);
  115.  
  116.             /* options button divider */
  117.             line3d(wid,darkcolor,WHITE,            w+h-1,w+1,w+h-2,TRUE);
  118.  
  119.  
  120.             /* edges */
  121.             for(m=0;m<ledge;m++)
  122.                 {
  123.                 agl_box(wid,WHITE,darkcolor,    m,m,lenx-1-m,leny-1-m,FALSE);
  124.                 agl_box(wid,darkcolor,WHITE,    w-1-m,w-1-m,lenx-w+m,leny-w+m,FALSE);
  125.                 }
  126.  
  127.             for(m=0;m<w-2*ledge;m++)
  128.                 agl_box(wid,midcolor,midcolor,    ledge+m,ledge+m,lenx-1-ledge-m,leny-1-ledge-m,FALSE);
  129.  
  130.  
  131.             /* sizing dimples */
  132.             if(Sizeable[wid])
  133.                 {
  134.                 /* left */
  135.                 a=1;
  136.                 b=w-ledge-1;
  137.                 line3d(wid,darkcolor,WHITE,        a,w+h-1,        b,FALSE);
  138.                 line3d(wid,darkcolor,WHITE,        a,leny-w-h-1,    b,FALSE);
  139.  
  140.                 /* right */
  141.                 a=lenx-w+1;
  142.                 b=lenx-2;
  143.                 line3d(wid,darkcolor,WHITE,        a,w+h-1,        b,FALSE);
  144.                 line3d(wid,darkcolor,WHITE,        a,leny-w-h-1,    b,FALSE);
  145.  
  146.                 /* top */
  147.                 a=1;
  148.                 b=w-ledge-1;
  149.                 line3d(wid,darkcolor,WHITE,        w+h-1,a,        b,TRUE);
  150.                 line3d(wid,darkcolor,WHITE,        lenx-w-h-1,a,    b,TRUE);
  151.  
  152.                 /* bottom */
  153.                 a=leny-w+1;
  154.                 b=leny-2;
  155.                 line3d(wid,darkcolor,WHITE,        w+h-1,a,        b,TRUE);
  156.                 line3d(wid,darkcolor,WHITE,        lenx-w-h-1,a,    b,TRUE);
  157.                 }
  158.  
  159.             /* black title outline */
  160.             agl_box(wid,BLACK,BLACK,            w-1,w-1,lenx-w-1,w+h-1,FALSE);
  161.  
  162.  
  163.             activate_clipping(wid);
  164.  
  165.             }
  166.  
  167.     winset(old_wid);
  168.     }
  169.  
  170.  
  171. /******************************************************************************
  172. void    line3d(long wid,long c1,long c2,long x1,long y1,long xy2,long vertical)
  173.  
  174.     horizontal or vertical line with 3D effect
  175.     from x1,y1 to x1,xy2 or xy2,y1
  176.  
  177.     c1 is the top/left color
  178.     c2 is the bottom/right color
  179.  
  180. ******************************************************************************/
  181. /*PROTOTYPE*/
  182. void line3d(long wid,long c1,long c2,long x1,long y1,long xy2,long vertical)
  183.     {
  184.     struct RastPort *rp;
  185.  
  186.     rp=GLWindow[wid]->RPort;
  187.  
  188.     /* top/left */
  189.     SetAPen(rp,c1);
  190.  
  191.     Move(rp,x1,y1);
  192.     if(vertical)
  193.         {
  194.         Draw(rp,x1,xy2);
  195.         x1++;
  196.         }
  197.     else
  198.         {
  199.         Draw(rp,xy2,y1);
  200.         y1++;
  201.         }
  202.  
  203.     /* bottom/right */
  204.     SetAPen(rp,c2);
  205.  
  206.     Move(rp,x1,y1);
  207.     if(vertical)
  208.         Draw(rp,x1,xy2);
  209.     else
  210.         Draw(rp,xy2,y1);
  211.     }
  212.  
  213.  
  214. /******************************************************************************
  215. void    agl_box(long wid,long c1,long c2,long x1,long y1,long x2,long y2,
  216.                                                                     long fill)
  217.  
  218.     for unfilled, c2 specifies different color for right and bottom
  219.  
  220. ******************************************************************************/
  221. /*PROTOTYPE*/
  222. void agl_box(long wid,long c1,long c2,long x1,long y1,long x2,long y2,long fill)
  223.     {
  224.     struct RastPort *rp;
  225.  
  226.     rp=GLWindow[wid]->RPort;
  227.  
  228.     SetAPen(rp,c1);
  229.  
  230.     if(fill)
  231.         RectFill(rp,x1,y1,x2,y2);
  232.     else
  233.         {
  234.         Move(rp,x2,y1);
  235.         Draw(rp,x1,y1);
  236.         Draw(rp,x1,y2);
  237.  
  238.         if(c1!=c2)
  239.             SetAPen(rp,c2);
  240.  
  241.         Draw(rp,x2,y2);
  242.         Draw(rp,x2,y1);
  243.         }
  244.     }
  245.  
  246.  
  247. /******************************************************************************
  248. void    agl_test(long wid,long c,long x,long y,char *string)
  249.  
  250. ******************************************************************************/
  251. /*PROTOTYPE*/
  252. void agl_text(long wid,long c,long x,long y,char *string)
  253.     {
  254.     struct RastPort *rp;
  255.  
  256.     rp=GLWindow[wid]->RPort;
  257.  
  258.     SetAPen(rp,c);
  259.  
  260.     Move(rp,x,y);
  261.     Text(rp,string,(ULONG)strlen(string));
  262.     }
  263. @
  264.  
  265.  
  266. 1.2.1.1
  267. log
  268. @forced update
  269. @
  270. text
  271. @d3 1
  272. a3 1
  273. $Id: border.c,v 1.2 1994/11/16 06:21:14 jason Exp jason $
  274. d5 1
  275. a5 4
  276. $Log: border.c,v $
  277.  * Revision 1.2  1994/11/16  06:21:14  jason
  278.  * complete Motif style borders
  279.  *
  280. @
  281.  
  282.  
  283. 1.2.1.2
  284. log
  285. @border buttons with feedback
  286. @
  287. text
  288. @d3 1
  289. a3 4
  290. Copyright © 1994 Jason Weber
  291. All Rights Reserved
  292.  
  293. $Id: border.c,v 1.2.1.1 1994/11/16 07:08:31 jason Exp jason $
  294. a5 3
  295.  * Revision 1.2.1.1  1994/11/16  07:08:31  jason
  296.  * forced update
  297.  *
  298. d22 1
  299. a22 1
  300. void    drawborder(long id,long button)
  301. a25 7
  302.     button:
  303.         0 = none
  304.         1 = menu button pressed
  305.         2 = title pressed
  306.         3 = minimize pressed
  307.         4 = maximize pressed
  308.  
  309. d28 1
  310. a28 1
  311. void drawborder(long id,long button)
  312. d34 1
  313. a34 2
  314.     long m;
  315.     long a,b,c;
  316. a70 18
  317.             /* clear title bar */
  318.             agl_box(wid,midcolor,midcolor,        w,w,lenx-w-1,w+h-1,TRUE,FALSE);
  319.  
  320. #if TRUE
  321.             /* title text */
  322.             agl_text(wid,BLACK,                    w+h+2,w+h-3,TitleList[wid]);
  323.  
  324.             /* title box */
  325.             agl_box(wid,WHITE,darkcolor,        w+h,w,lenx-w-2*h-1,w+h-2,FALSE,button==2);
  326.  
  327.             /* re-cover min/max area */
  328.             agl_box(wid,midcolor,midcolor,        lenx-w-2*h,w+1,lenx-w-1,w+h-2,TRUE,FALSE);
  329.  
  330.             /* options button box */
  331.             agl_box(wid,WHITE,darkcolor,        w,w,w+h-1,w+h-2,FALSE,button==1);
  332.  
  333.             /* minimize button box */
  334.             agl_box(wid,WHITE,darkcolor,        lenx-w-2*h,w,lenx-w-h-1,w+h-2,FALSE,button==3);
  335. d72 3
  336. a74 5
  337.             /* maximize button box */
  338.             agl_box(wid,WHITE,darkcolor,        lenx-w-h,w,lenx-w-2,w+h-2,FALSE,button==4);
  339.  
  340. #else
  341.             agl_box(wid,WHITE,darkcolor,        w,w,lenx-w-1,w+h-1,FALSE,FALSE);
  342. a78 3
  343.             /* re-cover min/max area */
  344.             agl_box(wid,midcolor,midcolor,        lenx-w-2*h-1,w+1,lenx-w-1,w+h-1,TRUE,FALSE);
  345.  
  346. d80 1
  347. a80 13
  348.             a=w+h-1;
  349.             b=w+1;
  350.             c=w+h-2;
  351.             line3d(wid,darkcolor,WHITE,            a,b,c,TRUE,FALSE);
  352.  
  353.             /* maximize button divider */
  354.             a=lenx-w-h-1;
  355.             line3d(wid,darkcolor,WHITE,            a,b,c,TRUE,FALSE);
  356.  
  357.             /* minimize button divider */
  358.             a=lenx-w-2*h-1;
  359.             line3d(wid,darkcolor,WHITE,            a,b,c,TRUE,FALSE);
  360. #endif
  361. a81 23
  362.             /* options logo */
  363.             a=w+h/2+1;
  364.             b=w+h/2;
  365.             agl_box(wid,midcolor,BLACK,            a-2,b-1,a+2,b+1,FALSE,FALSE);
  366.             a--;
  367.             b--;
  368.             agl_box(wid,BLACK,BLACK,            a-2,b-1,a+2,b+1,FALSE,FALSE);
  369.  
  370.             /* maximize logo */
  371.             a=lenx-w-h/2-1;
  372.             b++;
  373.             agl_box(wid,midcolor,BLACK,            a-2,b-2,a+2,b+2,FALSE,FALSE);
  374.             a--;
  375.             b--;
  376.             agl_box(wid,BLACK,BLACK,            a-2,b-2,a+2,b+2,FALSE,FALSE);
  377.  
  378.             /* minimize logo */
  379.             a=lenx-w-h*3/2;
  380.             b++;
  381.             agl_box(wid,midcolor,BLACK,            a-1,b-1,a+1,b+1,FALSE,FALSE);
  382.             a--;
  383.             b--;
  384.             agl_box(wid,BLACK,BLACK,            a-1,b-1,a+1,b+1,FALSE,FALSE);
  385. d86 2
  386. a87 2
  387.                 agl_box(wid,WHITE,darkcolor,    m,m,lenx-1-m,leny-1-m,FALSE,FALSE);
  388.                 agl_box(wid,darkcolor,WHITE,    w-1-m,w-1-m,lenx-w+m,leny-w+m,FALSE,FALSE);
  389. d91 1
  390. a91 2
  391.                 agl_box(wid,midcolor,midcolor,    ledge+m,ledge+m,lenx-1-ledge-m,leny-1-ledge-m,
  392.                                                                                         FALSE,FALSE);
  393. d123 1
  394. a123 1
  395.             agl_box(wid,BLACK,BLACK,            w-1,w-1,lenx-w-1,w+h-1,FALSE,FALSE);
  396. d179 1
  397. a179 1
  398.                                                         long fill,long inverse)
  399. a182 2
  400.     inverse will reverse colors
  401.  
  402. d185 1
  403. a185 1
  404. void agl_box(long wid,long c1,long c2,long x1,long y1,long x2,long y2,long fill,long inverse)
  405. d191 1
  406. a191 4
  407.     if(inverse)
  408.         SetAPen(rp,c2);
  409.     else
  410.         SetAPen(rp,c1);
  411. d202 1
  412. a202 6
  413.             {
  414.             if(inverse)
  415.                 SetAPen(rp,c1);
  416.             else
  417.                 SetAPen(rp,c2);
  418.             }
  419. @
  420.  
  421.  
  422. 1.1
  423. log
  424. @Initial revision
  425. @
  426. text
  427. @d3 1
  428. a3 1
  429. $Id: $
  430. d5 4
  431. a8 1
  432. $Log: $
  433. d19 3
  434. a21 1
  435. void    drawborder(long wid)
  436. d25 1
  437. a25 1
  438. void drawborder(long wid)
  439. d28 122
  440. d151 28
  441. a178 1
  442.     get_dimensions(wid,&x,&y,&lenx,&leny);
  443. d180 24
  444. a203 4
  445.     /* top */
  446.     draw_line(wid,WHITE,        0,0,lenx-1,0);
  447.     draw_line(wid,LIGHTGREY,    1,1,lenx-2,1);
  448.     draw_line(wid,DARKGREY,        2,2,lenx-1,2);
  449. d208 1
  450. a208 1
  451. void    draw_line(long wid,long c,long x1,long y1,long x2,long y2)
  452. d212 1
  453. a212 1
  454. void draw_line(long wid,long c,long x1,long y1,long x2,long y2)
  455. d216 1
  456. a216 1
  457.     rp=GLWindow[wid]->rp;
  458. d219 3
  459. a221 2
  460.     Move(rp,x1,y1);
  461.     Draw(rp,x2,y2);
  462. @
  463.